#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>

// 玩一玩多进程的waitpid回收
int main()
{
  pid_t ret = fork();
   
  // 用waitpid 处理子进程的僵尸进程状态
  if( ret == 0  )
  {
     int cnt = 5;
     while(cnt)
     {
        printf("我是子进程我的pid是:%d,cnt = %d\n" ,getpid() , cnt);

        cnt--;
        sleep(1);
       // 来一个异常退出看看
       // int text = 0 ;
       // cnt /= text   
     }
     // 5 秒后进程退出
     exit(0);
  }
  
  // 父进程先休眠10秒中，然后调用waitpid回收正在僵尸进程的PCB ，获得退出状态
  sleep(10);
  int status = 0;
  pid_t ret_Status = waitpid(ret , &status , 0);
  
  // 注意status用的是位图存储
  printf("我是父进程我的pid : %d , 我回收的子进程 pid : %d , 子进程的回收信号 ：%d , 子进程的回收码 ；%d\n" , getpid() , ret_Status , status & 0x7F ,( status >> 8 ) & 0xFF );
                                                                                                    
   sleep(5);
  // 

  return 0;
}
